package com.epk.pic.config;

import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * 分页拦截器
 */
@Configuration
public class PageHelperConfigure {

    @Bean
    public PageInterceptor pageInterceptor() {

        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();

        //设置数据库类型
        properties.setProperty("helperDialect", "mysql");

        //该参数默认为false
        //设置为true时，会将RowBounds第一个参数offset当成pageNum页码使用
        //和startPage中的pageNum效果一样
        //测试成功，未发现问题。
        properties.setProperty("offsetAsPageNum", "true");

        //该参数默认为false
        //设置为true时，使用RowBounds分页会进行count查询
        //测试成功，未发现问题。
        properties.setProperty("rowBoundsWithCount", "true");

        //支持通过 Mapper 接口参数来传递分页参数，默认值false
        //测试成功，未发现问题。
        properties.setProperty("supportMethodsArguments","true");
        pageInterceptor.setProperties(properties);

        //如果觉得某个地方使用分页后，你仍然想通过控制参数查询全部的结果，你可以配置 `pageSizeZero` 为 `true`，
        //配置后，当 `pageSize=0` 或者 `RowBounds.limit = 0` 就会查询出全部的结果。
        //测试成功，未发现问题。
        properties.setProperty("pageSizeZero", "true");

        //默认值为 `false`。设置为 `true` 时，允许在运行时根据多数据源自动识别对应方言的分页
        //修改参数后未报错，通过debug追踪发现进行了匹配，未发现问题。
        properties.setProperty("autoRuntimeDialect", "false");

        //默认值为 `true`。当使用运行时动态数据源或没有设置 `helperDialect` 属性自动获取数据库类型时，会自动获取一个数据库连接，
        //通过该属性来设置是否关闭获取的这个连接，默认`true`关闭，设置为 `false` 后，不会关闭获取的连接，这个参数的设置要根据自己选择的数据源来决定。
        //修改参数后未报错，未发现问题。
        properties.setProperty("closeConn", "false");

        return pageInterceptor;
    }

}